﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdministracionCooperativa.entidades;
using AdministracionCooperativa.Controlador;

namespace AdministracionCooperativa.Formularios
{
    public partial class Frmad : Form
    {
        private List<catcou> tipos = null;
        private List<sysusr> usuarios = null;
        private int a = -1;
        public Frmad()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Metodo para identificar el numero de index seleccionado en un listview
        /// </summary>
        private int LVItemSeleccionado(ListView LView)
        {
            for (int i = 0; i < LView.Items.Count; i++)
            {
                if (LView.Items[i].Selected == true)
                {
                   //MessageBox.Show("seleccionado: "+ Convert.ToString(i));
                    return i;
                }
            }
            return -1;
        }

        private void limpiartbusu()
        { 
            tbnomusu.Text="";
            tbusu.Text="";
            tbconusu.Text="";
            lbtipousu.Text = "";
        }
        private string ValidarTextBox()
        {
            var mensaje = string.Empty;
            var controles = this.Controls["GBcuo"].Controls["gbdetalle"];
            foreach (var item in controles.Controls)
            {
                decimal valor;
                if (item is TextBox)
                {
                    var controltext = (TextBox)item;
                    if (!decimal.TryParse(controltext.Text.ToString(), out valor))
                        mensaje += "El Valor" + controltext.Text + ", no es un numero valido. \n";
                }
            }

            return mensaje;
        }

        private void rB1_CheckedChanged(object sender, EventArgs e)
        {
            GBusu.Visible = true;
            aguser.Visible = true;
            euser.Visible = true;
            GBcuo.Visible = false;
            listvusu.Clear();
            listvusu.Columns.Add("USUARIOS", 510);
            tbnomusu.Text = "";
            tbusu.Text = "";
            tbconusu.Text = "";
            lbtipousu.Text = "Administrador";
            usuarios = ControladorUsuario.AllUsuarios();
            foreach (var item in usuarios)
            {
                listvusu.Items.Add(item.NOMBRE);
            }
        }

        private void rB2_CheckedChanged(object sender, EventArgs e)
        {
            GBcuo.Visible = true;
            aguser.Visible = false;
            euser.Visible = false;
            GBusu.Visible = false;           
            tbcuota.Text = "";
            tbchofer.Text = "";
            tbchecador.Text = "";
            tbposturero.Text = "";
            tbfonacc.Text = "";
            tbcoopera.Text = "";
            tbsubsidio.Text = "";
            tbmulta.Text = "";
            //presentacion de datos
            listvtiuni.Clear();
            listvtiuni.Columns.Add("TIPO DE UNIDADES", 510);
            tipos= ControladorAdminCuota.AllTipoUnidad();
            foreach (var item in tipos)
            {
                listvtiuni.Items.Add(item.TIPO);             
            }
                       
        }

        private void GBcuo_Enter(object sender, EventArgs e)
        {

        }

        private void Frmad_Load(object sender, EventArgs e)
        {
            rbuser.Checked = true;
            GBusu.Visible = true;
            aguser.Visible = true;
            euser.Visible = true;
            GBcuo.Visible = false;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            Application.OpenForms["Frmad"].Close();
        }

        private String TipoUsr(String tipusu)
        {
            
            switch (tipusu)
                {
                    case "A":
                        return "Administrador";
                    case "U":
                        return "Usuario";
                    case "C":
                        return "Captura";
                    default:
                        return "No existe";
                }
        }

        private void listvtiuni_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = LVItemSeleccionado(listvtiuni);
            if (i != -1)
            {
                tbcuota.Text = tipos[i].CUOTA.ToString();
                tbchofer.Text = tipos[i].SEGCHO.ToString();
                tbchecador.Text = tipos[i].CHECADOR.ToString();
                tbposturero.Text = tipos[i].POSTURERO.ToString();
                tbfonacc.Text = tipos[i].TEMP.ToString();
                tbcoopera.Text = tipos[i].COOSOC.ToString();
                tbsubsidio.Text = tipos[i].SUBBAR.ToString();
                tbmulta.Text = tipos[i].SEGIMSS.ToString();
            }                                   
        }

        private void faltadatos()
        {
            MessageBox.Show("Errores al Capturar: Hacen falta datos");
            if (tbnomusu.Text == "")
                tbnomusu.Focus();
            else
                if (tbusu.Text == "")
                    tbusu.Focus();
                else
                    if (tbconusu.Text == "")
                        tbconusu.Focus();
                    else
                        lbtipousu.Focus();
        }

        private string ChecaTipoUsr(string tipou)
        {
            switch (tipou)
            {
                case "Administrador":
                    return "A";
                case "Usuario":
                    return "U";
                case "Captura":
                    return "C";
                default:
                    return "N";
            }
        }
      
        private void button3_Click(object sender, EventArgs e)
        {
            if (rbuser.Checked == true)
            {
                if (tbnomusu.Text == "" || tbusu.Text == "" || tbconusu.Text == "" || lbtipousu.Text == "")
                { 
                   faltadatos();                 
                }
                else
                {
                    if (a != -1)
                    {
                        int i = a; //LVItemSeleccionado(listvusu);

                        sysusr usuariosys = ControladorUsuario.GetUsuarioById(ControladorUsuario.ExisteUsuario(usuarios[i].USUARIO, usuarios[i].PASS));
                        usuariosys.NOMBRE = tbnomusu.Text;
                        usuariosys.USUARIO = tbusu.Text;
                        usuariosys.PASS = tbconusu.Text;
                        usuariosys.TIPO = ChecaTipoUsr(lbtipousu.Text);
                        long verificacion = ControladorUsuario.Guardarusu(usuariosys);
                        if (verificacion != 0)
                        {
                            MessageBox.Show("Usuario Modificado");
                            usuarios = ControladorUsuario.AllUsuarios();
                            listvusu.Clear();
                            listvusu.Columns.Add("USUARIOS", 510);
                            a = -1;
                            foreach (var item in usuarios)
                            {
                                listvusu.Items.Add(item.NOMBRE);
                            }
                            limpiartbusu();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Seleccione un usuario de la lista");
                    }
                }

            }
            else
            {
                var errores = ValidarTextBox();
                if (!string.IsNullOrWhiteSpace(errores))
                    MessageBox.Show("Errores al Capturar: " + errores, "CONTTAS", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    int i = LVItemSeleccionado(listvtiuni);
                    tipos[i].CUOTA = Convert.ToDecimal(tbcuota.Text);
                    tipos[i].SEGCHO = Convert.ToDecimal(tbchofer.Text);
                    tipos[i].CHECADOR = Convert.ToDecimal(tbchecador.Text);
                    tipos[i].POSTURERO = Convert.ToDecimal(tbposturero.Text);
                    tipos[i].TEMP = Convert.ToDecimal(tbfonacc.Text);
                    tipos[i].COOSOC = Convert.ToDecimal(tbcoopera.Text);
                    tipos[i].SUBBAR = Convert.ToDecimal(tbsubsidio.Text);
                    tipos[i].SEGIMSS = Convert.ToDecimal(tbmulta.Text);
                    String idCuota = ControladorAdminCuota.Actualizacatcou(tipos[i]);
                    if (idCuota != "")
                    {
                        MessageBox.Show("CUOTAS MODIFICADAS");
                        tipos = ControladorAdminCuota.AllTipoUnidad();
                    }

                }
            }
        }

        private void listvusu_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = LVItemSeleccionado(listvusu);
            a = i;
            if (i != -1)
            {
                tbnomusu.Text = usuarios[i].NOMBRE;
                tbusu.Text = usuarios[i].USUARIO;
                tbconusu.Text = usuarios[i].PASS;                
                lbtipousu.Text = TipoUsr(usuarios[i].TIPO);
            }
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void aguser_Click(object sender, EventArgs e)
        {
            if (tbnomusu.Text == "" || tbusu.Text == "" || tbconusu.Text == "" || lbtipousu.Text == "")
            {
                faltadatos();
            }
            else
            {
                long idu = ControladorUsuario.ExisteUsuario(tbusu.Text, tbconusu.Text);
                if (idu > 0)
                {
                    MessageBox.Show("El usuario Ya existe", "USUARIOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    DialogResult Result;
                    Result = MessageBox.Show("SE INSERTARÁ UN NUEVO USUARIO, ¿DESEA CONTINUAR?", "USUARIO", MessageBoxButtons.OKCancel);
                    if (Result == DialogResult.OK)
                    {
                        sysusr Newusuario= new sysusr();
                        Newusuario.NOMBRE = tbnomusu.Text;
                        Newusuario.USUARIO = tbusu.Text;
                        Newusuario.PASS = tbconusu.Text;
                        Newusuario.TIPO = ChecaTipoUsr(lbtipousu.Text);
                        Newusuario.ACTIVO = true;
                        Newusuario.PERMISO = true;
                        switch (lbtipousu.Text)
                        {
                            case "Administrador":
                                Newusuario.MODEMP = "A";
                                Newusuario.MODADM = "A";
                                Newusuario.MODCAP = "A";
                                Newusuario.MODUNI = "A";
                                break;
                            case "Usuario":
                                Newusuario.MODEMP = "A";
                                Newusuario.MODADM = null;
                                Newusuario.MODCAP = null;
                                Newusuario.MODUNI = "A";
                                break;
                            case "Captura":
                                Newusuario.MODEMP = null;
                                Newusuario.MODADM = null;
                                Newusuario.MODCAP = "A";
                                Newusuario.MODUNI = null;
                                break;
                            default:
                                break;
                        }
                        long idus= ControladorUsuario.CrearUsuario(Newusuario);
                        if (idus > 0)
                        {
                            MessageBox.Show("Usuario Creado", "USUARIOS");
                            usuarios = ControladorUsuario.AllUsuarios();
                            listvusu.Clear();
                            listvusu.Columns.Add("USUARIOS", 510);
                            a = -1;
                            foreach (var item in usuarios)
                            {
                                listvusu.Items.Add(item.NOMBRE);
                            }
                            limpiartbusu();
                        }
                    }
                }
            }
        }

        private void euser_Click(object sender, EventArgs e)
        {
            if (tbnomusu.Text == "" || tbusu.Text == "" || tbconusu.Text == "" || lbtipousu.Text == "")
            {
                MessageBox.Show("SELECCIONE UN USUARIO DE LA LISTA", "USUARIOS");
            }
            else
            {
                long idu = ControladorUsuario.ExisteUsuario(tbusu.Text, tbconusu.Text);
                if (idu < 0)
                {
                    MessageBox.Show("El usuario NO EXISTE", "USUARIOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    DialogResult Result;
                    Result = MessageBox.Show("SE ELIMINARÁ EL USUARIO SELECCIONADO, ¿DESEA CONTINUAR?", "USUARIO", MessageBoxButtons.OKCancel);
                    if (Result == DialogResult.OK)
                    {
                        int idus = ControladorUsuario.EliminarUsuarioById(idu);
                        if (idus > 0)
                        {
                            MessageBox.Show("Usuario Eliminado", "USUARIOS");
                            usuarios = ControladorUsuario.AllUsuarios();
                            listvusu.Clear();
                            listvusu.Columns.Add("USUARIOS", 510);
                            a = -1;
                            foreach (var item in usuarios)
                            {
                                listvusu.Items.Add(item.NOMBRE);
                            }
                            limpiartbusu();
                        }
                    }
                }
            }
        }

        private void tbnomusu_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbusu.Focus();
            }
        }

        private void tbusu_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbconusu.Focus();
            }
        }

        private void tbcuota_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbchofer.Focus();
            }
        }

        private void tbchofer_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbchecador.Focus();
            }
        }

        private void tbchecador_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbposturero.Focus();
            }
        }

        private void tbposturero_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbfonacc.Focus();
            }
        }

        private void tbfonacc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbcoopera.Focus();
            }
        }

        private void tbcoopera_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbsubsidio.Focus();
            }
        }

        private void tbsubsidio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                tbmulta.Focus();
            }
        }

        private void tbmulta_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(13))
            {
                button3.Focus();
            }
        }
    }
}
